/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modulo;

import Eventos.CustomEvent;
import Modulos.Modulo;
import entidates.Persona;
import interfaces.Controlador;
import interfaces.IVista;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import utility.Globals;

/**
 *
 * @author Overpower
 */
public class FichaPersonalControlador extends Controlador{
    
    private final FichaPersonalVista _vista;
    
    // vista izq
    private final DatosPersonalesVista _vistaDatosPersonales;
    
    // vista derecha
    private final DatosPersonalesControlador _controladorDatosPersonales;
    
    private boolean _modoEdicion;
    private Persona _personaSeleccionada;
    
    
    public FichaPersonalControlador(  )
    {
        // creamos el tabbed pane, donde contener los paneles
        this._vista = new FichaPersonalVista();
        
        // creamos y añadimos el primer panel
        this._controladorDatosPersonales = new DatosPersonalesControlador();
        _vistaDatosPersonales = (DatosPersonalesVista) this._controladorDatosPersonales.getVista();
        _vista.insertTab( "Info", null, _vistaDatosPersonales, "Informacion Personal", 0 );
        
        addListeners();
    }
    
    @Override
    protected final void addListeners()
    {
        _vistaDatosPersonales.getBtnGuardar().addActionListener(this::_btnGuardarActionPerformed);       
        _vistaDatosPersonales.getBtnEditar().addActionListener(this::_btnEditarActionPerformed);
    }
    
    
    public void Editable( Boolean _f )
    {
        _modoEdicion = _f;
        _vistaDatosPersonales.getBtnEditar().setEnabled(_f);
        _vistaDatosPersonales.getBtnGuardar().setEnabled(!_f);
    }
    
    public void ModoAlta()
    {
        Editable(false);
        _controladorDatosPersonales.SetFocusable(true);
    }
    
    public void PoblarDatos( Persona _p )
    {
        _personaSeleccionada = _p;
        _vistaDatosPersonales.setNombre( _p.GetNombre() );
        _vistaDatosPersonales.setApellido(_p.GetApellido());
        
        SimpleDateFormat _sdf = new SimpleDateFormat(Globals.DateFormatString);
        _vistaDatosPersonales.setFechaNacimiento( _sdf.format( _p.GetFechaDeNacimiento()) );
        
        _vistaDatosPersonales.setDocumento( _p.GetDocumento().toString() );
        _vistaDatosPersonales.setLegajo( _p.GetLegajo().toString() );
        
        _vistaDatosPersonales.setDomicilio( _p.GetDomicilio() );
        _vistaDatosPersonales.setCiudad( _p.GetCiudad());
        _vistaDatosPersonales.setProvincia(_p.GetProvincia());
        _vistaDatosPersonales.setTelefono( _p.GetTelefono() );
        _vistaDatosPersonales.setEmail(_p.GetEmail());
        _vistaDatosPersonales.setGenero( _p.GetGenero() );
        _vistaDatosPersonales.setNacionalidad(_p.GetNacionalidad());
        
    }

    public Persona ObtenerDatos()
    {
        Persona _p = _personaSeleccionada != null ? _personaSeleccionada : new Persona();
        
        _p.SetApellido(_vistaDatosPersonales.getApellido());
        _p.SetNombre( _vistaDatosPersonales.getNombre() );
        SimpleDateFormat _sdf = new SimpleDateFormat(Globals.DateFormatString);
        
        try {
            _p.SetFechaDeNacimiento( _sdf.parse( _vistaDatosPersonales.getFechaNacimiento() ) );
        } catch (ParseException ex) {
            Logger.getLogger(FichaPersonalControlador.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        _p.SetDocumento( Integer.parseInt( _vistaDatosPersonales.getDocumento()) );
        _p.SetLegajo( Integer.parseInt( _vistaDatosPersonales.getLegajo() ) );
        
        _p.SetDomicilio(_vistaDatosPersonales.getDomicilio());
        _p.SetCiudad(_vistaDatosPersonales.getCiudad());
        _p.SetProvincia(_vistaDatosPersonales.getProvincia());
        _p.SetTelefono(_vistaDatosPersonales.getTelefono());
        _p.SetEmail(_vistaDatosPersonales.getEmail());
        _p.SetGenero(_vistaDatosPersonales.getGenero() );
        _p.SetNacionalidad(_vistaDatosPersonales.getNacionalidad());
        
        return _p;
    }
    
    public void LimpiarDatos()
    {
        _controladorDatosPersonales.LimpiarDatos();
        _personaSeleccionada = null;
    }
    
    private void _btnEditarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        
        _controladorDatosPersonales.SetFocusable(true);

        Editable(false);

        _modoEdicion = true;

        DispatchCustomEvent( new CustomEvent( this, "OnEdition", "begin" ) );
         
    }                                          

    private void Reset()
    {
        _controladorDatosPersonales.SetFocusable(false);
        if( !_modoEdicion )
            LimpiarDatos();
        
        _controladorDatosPersonales.Reset(_modoEdicion);
    }
        
    private void _btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
        
        String _err;
        
        if( _modoEdicion ){
            _err =_modulo.Modificar( ObtenerDatos() );
        }else{
            Persona _p = ObtenerDatos();
            _err = _modulo.Agregar( _p );
        }
        
        if( !"".equals(_err) )
        {
            JOptionPane.showMessageDialog(null, _err);
        }
        
        Reset();
    }   

    @Override
    public IVista getVista() {
        return _vista;
    }
    
}
